#ifndef TIPOCLAVE_H_
#define TIPOCLAVE_H_

#include "Key.h"
#include "../Bytes.h"

class TipoClave {

private:
	std::string id;

public:
	/*
	 * Pre: -
	 * Pos: Crea una nueva instancia.
	 */

	TipoClave(std::string nombre ="sinnombre");

	/*
	 * Pre: -
	 * Pos: Libera los recursos instanciados.
	 */
	virtual ~TipoClave();

	/*
	 * Pre: -
	 * Pos: Devuelve un string con el contenido del extractor.
	 */
	virtual std::string toString();

	/*
	 * Pre: -
	 * Pos: Setea el id del extractor.
	 */
	void setId(std::string id);

	/*
	 * Pre: -
	 * Pos: Extrae la clave de dato.
	 */
	virtual Bytes extraerClave(Bytes dato) = 0;

	/*
	 * Pre: -
	 * Pos: Crea una nueva clave.
	 */
	virtual Key crearClave(Bytes clave) = 0;
};

#endif /* TIPOCLAVE_H_ */
